home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / BBS-Archive / Comm / AmiTCP30b2.lha / src / l / inet-handler / applport.h < prev    next >
C/C++ Source or Header  |  1994-04-05  |  3KB  |  102 lines

  1. /*
  2.  * applport.h
  3.  *
  4.  * Author: Tomi Ollila <too@cs.hut.fi>
  5.  *
  6.  *     Copyright (c) 1993 Tomi Ollila
  7.  *         All rights reserved
  8.  *
  9.  * Created: Fri Nov  5 17:55:48 1993 too
  10.  * Last modified: Mon Nov 15 18:05:13 1993 too
  11.  *
  12.  * HISTORY
  13.  * $Log: applport.h,v $
  14.  * Revision 1.1  1993/11/17  11:47:44  too
  15.  * Initial revision
  16.  *
  17.  */
  18.  
  19. #ifndef _APPLPORT_H_
  20. #define _APPLPORT_H_
  21.  
  22. #ifndef EXEC_INTERRUPTS_H
  23. #include <exec/interrupts.h>
  24. #endif
  25.  
  26. #ifndef DEVICES_TIMER_H
  27. #include <devices/timer.h>
  28. #endif
  29.  
  30. #include <sys/types.h>
  31.  
  32. #ifndef inline
  33. #define inline __inline
  34. #endif
  35.  
  36. /*
  37.  * Application info object to always rendezvous w/ right application. This
  38.  * always exists w/ the application that has handler open. waitforchar and
  39.  * write structures are created at need. Since the use of IoctlSocket() the
  40.  * whole WaitForPort structure shrunk into one timerequest structure which
  41.  * is now incorporated into this module. This simplified the code a great
  42.  * deal :) (r1.4 -> r1.5)
  43.  */
  44.  
  45. struct ApplMsgPort {
  46.   struct MsgPort    amp_Msgport;
  47.   struct Interrupt    amp_Interrupt;
  48. };
  49.  
  50. void initApplMsgPort(struct ApplMsgPort * port);
  51.  
  52. struct ApplShared;
  53. struct PendingWrites;
  54. struct ApplPort {
  55.   struct ApplMsgPort    ap_AMP;     /*  */
  56.   struct ApplShared *    ap_AS;
  57.   struct Task *        ap_Task;    /* task pointer of orig opener */
  58.   LONG             ap_Sd;        /* socket fd for application */
  59.   BYTE            ap_OpenCnt; /* Open() + reopens */
  60.   BYTE            ap_Disb;    /* data in socket buffer ? */
  61.   struct PendingWrites*    ap_Pw;        /* pointer to my pending write */
  62.   struct DosPacket *    ap_Packet;  /* packet in */
  63.   struct timerequest    ap_Tr;        /* Request for timer message. */
  64. };
  65.  
  66. struct PendingWrites {
  67.   struct Node         pw_Link;      /* link freed pending nodes together */
  68.   struct ApplPort *  pw_Applport; /* link to application */
  69.   char *         pw_Start;    /* start addres of not written data and ..*/
  70.   int             pw_Left;      /* ... bytes not written (current pw) */
  71.   int             pw_Len;      /* length of data for final ReplyPkt() */
  72.   struct DosPacket * pw_Packet;      /* Write packet pending */
  73. };
  74.  
  75. /*
  76.  * Data reachable from application structures
  77.  */
  78.  
  79. struct ApplShared {
  80.   struct ApplPort *    as_applcbbuf[0x40]; /* hardcoded :( */
  81.   LONG            as_applcbpos;
  82.   LONG            as_applcbcur; /* here for consistency */
  83.   struct Task *        as_me;
  84.   ULONG            as_applportflag;
  85. };
  86.  
  87. #define    applcbbuf     AS RFI as_applcbbuf
  88. #define    applcbpos     AS RFI as_applcbpos
  89. #define    applcbcur     AS RFI as_applcbcur
  90. #define    me             AS RFI as_me
  91. #define    applportflag       AS RFI as_applportflag
  92.  
  93. static inline void
  94. NewList(struct List * list)
  95. {
  96.   list->lh_Head = (struct Node *)&list->lh_Tail;
  97.   list->lh_Tail = 0;
  98.   list->lh_TailPred = (struct Node *)&list->lh_Head;
  99. }
  100.  
  101. #endif /* _APPLPORT_H_ */
  102.